#ifndef BSP_FLASH_H_
#define BSP_FLASH_H_


/*FLASH 操作********************************************************************************************/
#define FLASH_START_ADDR                    0x00000000      /*FLASH开始地址*/
#define FLASH_TOTAL_SIZE                    0x20000         /*FLASH大小*/
#define FLASH_SECTOR_SIZE                   0x800           /*FLASH最小擦除扇区大小*/


//读取指定地址的半字(16位数据)
//faddr:读地址(此地址必须为2的倍数!!)
//返回值:对应数据.
uint16_t EFRFLASH_ReadHalfWord(uint32_t faddr);
//读取指定地址的字(32位数据)
//faddr:读地址
//返回值:对应数据.
uint32_t EFRFLASH_ReadWord(uint32_t faddr);

int WriteFlashPrepare(uint32_t addr, uint32_t lens);
/****************************************************************
*Name:      ReadFlashNBtye
*Function:  从内部Flash读取N字节数据
*Input:     STARTADDR：数据地址（偏移地址）
*Input:     ReadBuf：数据指针
*Input:     ReadNum：读取字节数
*Output:    读取的字节数
*Author:    gm_jeng
*Date:      2020/3/10
*E-Mail:    gm_jeng@163.com
*Other:
****************************************************************/

int ReadFlashNBtye(uint32_t STARTADDR, uint8_t *ReadBuf, uint32_t ReadNum);



/****************************************************************
*Name:      WriteFlashOneWord
*Function:  向内部Flash写入32位数据
*Input:     WriteAddress：数据地址（偏移地址）WriteData：写入数据
*Output:    NULL
*Author:    ValerianFan
*Date:      2014/04/09
*E-Mail:    fanwenjingnihao@163.com
*Other:
****************************************************************/
void WriteFlashOneWord(uint32_t addr, uint32_t WriteData);

uint8_t Erase_Parameter_Sector(uint32_t addr);

/**WriteAddr:起始地址(此地址必须为4的倍数!!)
  *pBuffer:数据指针
  *NumToWrite:字(32位)数(就是要写入的32位数据的个数.)
  */
void EFRFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite);
/****************************************************************
*Name:      FlashOperation
*Function:  参数设置函数
*Input:     NULL
*Output:    NULL
*Author:    gm_jeng
*Date:      2020/3/10
*E-Mail:    gm_jeng@163.com
*Other:
****************************************************************/
void FlashOperation(void);
void FlashOperation1(void);
/****************************************************************
*Name:      OTAFlashOperation
*Function:  升级参数设置函数
*Input:     NULL
*Output:    NULL
*Author:    gm_jeng
*Date:      2020/3/10
*E-Mail:    gm_jeng@163.com
*Other:
****************************************************************/
void OTAFlashOperation(void);


#endif
